﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;

namespace Z16.BLI
{
    public class Usuario
    {
        #region "Variaveis"

        private int intCodUsuario;
        public int IntCodUsuario
        {
            get { return intCodUsuario; }
            set { intCodUsuario = value; }
        }

        private string strNomeUsuario;
        public string StrNomeUsuario
        {
            get { return strNomeUsuario; }
            set { strNomeUsuario = value; }
        }

        private int intCPF;
        public int IntCPF
        {
            get { return intCPF; }
            set { intCPF = value; }
        }

        private DateTime dtDataNasc;
        public DateTime DtDataNasc
        {
            get { return dtDataNasc; }
            set { dtDataNasc = value; }
        }

        private string strLogin;
        public string StrLogin
        {
            get { return strLogin; }
            set { strLogin = value; }
        }

        private string strSenha;
        public string StrSenha
        {
            get { return strSenha; }
            set { strSenha = value; }
        }

        private string strEmail;
        public string StrEmail
        {
            get { return strEmail; }
            set { strEmail = value; }
        }

        private int intCodPerfil;
        public int IntCodPerfil
        {
            get { return intCodPerfil; }
            set { intCodPerfil = value; }
        }

        private string strNomePerfil;
        public string StrNomePerfil
        {
            get { return strNomePerfil; }
            set { strNomePerfil = value; }
        }

        #endregion

        #region "Metodos"
        /// <summary>
        /// Seleciona todos os Usuários.
        /// </summary>
        /// <returns></returns>
        public static List<Usuario> selUsuario()
        {
            List<Usuario> allUsers = new List<Usuario>();
            Usuario Usario = new Usuario();

            SqlDataReader drUsers = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelUsuario");

            while (drUsers.Read())
            {
                //Usario.IntCodDemanda = Convert.ToInt64(drUsers["COD_DEMANDA"].ToString());
                //Usario.StrNomeDemanda = drUsers["NOME_DEMANDA"].ToString();
                //Usario.IntCodPrioridade = Convert.ToInt64(drUsers["COD_PRIORIDADE"].ToString());
                //Usario.StrNomePrioridade = drUsers["NOME_PRIORIDADE"].ToString();
                //Usario.IntCodStatus = Convert.ToInt64(drUsers["COD_STATUS"].ToString());
                //Usario.StrStatus = drUsers["STATUS"].ToString();
                //Usario.IntCodCliente = Convert.ToInt64(drUsers["COD_CLIENTE"].ToString());
                //Usario.StrNomeCliente = drUsers["NOME_CLIENTE"].ToString();
                //Usario.DtDataInclusao = Convert.ToDateTime(drUsers["DT_INCLUSAO"].ToString());
                //Usario.DtInicio = Convert.ToDateTime(drUsers["DT_INICIO"].ToString());
                //Usario.DtTermino = Convert.ToDateTime(drUsers["DT_TERMINO"].ToString());
                //Usario.StrDescricao = drUsers["DESCRICAO"].ToString();
                //Usario.IntHoraEstimada = Convert.ToInt16(drUsers["HORA_ESTIMADA"].ToString());
                //Usario.IntCodUser = Convert.ToInt64(drUsers["COD_USER"].ToString());

                allUsers.Add(Usario);

            }
            return allUsers;
        }

        /// <summary>
        ///  Inclusao inicial Usuario no sistema.
        /// </summary>
        /// <param name="strNomeDemanda"></param>
        /// <param name="intCodPrioridade"></param>
        /// <param name="intCodStatus"></param>
        /// <param name="intCodCliente"></param>
        /// <param name="dtInicio"></param>
        /// <param name="dtTermino"></param>
        /// <param name="strDescricao"></param>
        /// <param name="intHoraEstimada"></param>
        /// <param name="intCodUser"></param>
        /// <returns></returns>

        //public static string incUsuario(string strNomeUsuario,
        //                                    int intCPF,
        //                                    DateTime dtNasc,
        //                                    string strLogin,
        //                                    string strSenha,
        //                                    string strEmail,
        //                                    int intCodPerfil
        //                                    )
        //{
        //    try
        //    {

        //        SqlParameter[] pms =
        //            {
        //                new SqlParameter("@NOMEUSUARIO", strNomeUsuario),
        //                new SqlParameter("@CPF", intCPF),
        //                new SqlParameter("@DTNASC", dtNasc),
        //                new SqlParameter("@LOGIN", strLogin),
        //                new SqlParameter("@SENHA", strSenha),
        //                new SqlParameter("@EMAIL", strEmail),
        //                new SqlParameter("@CODPERFIL", intCodPerfil)
        //            };

        //        SqlHelper.ExecuteNonQuery(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procIncUsuario", pms);

        //        return "";
        //    }
        //    catch (Exception ex)
        //    {
        //        return "Erro ao inserir Demanda: " + ex.Message;

        //    }
        //}

        public List<Usuario> listarPerfil()
        {
            List<Usuario> allPerfils = new List<Usuario>();

            SqlParameter[] pms =
                    {
                        new SqlParameter("@codPerf",null),
                    };


            SqlDataReader drPerfil = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelPerfil",pms);
            while (drPerfil.Read())
            {
                Usuario Usuario = new Usuario();
                Usuario.intCodPerfil = Convert.ToInt32(drPerfil["COD_PERFIL"].ToString());
                Usuario.strNomePerfil = drPerfil["NOME_PERFIL"].ToString();
                allPerfils.Add(Usuario);
            }
            return allPerfils;
        }

        public static List<Usuario> listarUsuarioPorPerfil(string nomePerfil)
        {
            List<Usuario> Users = new List<Usuario>();
            SqlDataReader drUsers = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelResponsaveisCentroDeCusto");

            while (drUsers.Read())
            {
                Usuario Usuario = new Usuario();
                Usuario.intCodUsuario = Convert.ToInt32(drUsers["Cod_Usuario"].ToString());
                Usuario.strNomeUsuario = drUsers["Nome_Usuario"].ToString();
                Users.Add(Usuario);

            }
            return Users;
        }

        public string incUsuario(string strNomeUsuario, string intCPF, DateTime dtNasc, 
                                        string strLogin, string strSenha,
                                        string strEmail, int intCodPerfil)
        {
            try
            {

                SqlParameter[] pms =
                    {
                        new SqlParameter("@NOMEUSUARIO", strNomeUsuario),
                        new SqlParameter("@CPF", intCPF),
                        new SqlParameter("@DTNASC", dtNasc),
                        new SqlParameter("@LOGIN", strLogin),
                        new SqlParameter("@SENHA", strSenha),
                        new SqlParameter("@EMAIL", strEmail),
                        new SqlParameter("@CODPERFIL", intCodPerfil)
                    };

                SqlHelper.ExecuteNonQuery(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procIncUsuario", pms);

                return "0;Usuário cadastrado com Sucesso!";
            }
            catch (Exception ex)
            {
                return "1;Erro ao inserir Usuário: " + ex.Message;

            }
        }

        public DataTable ListarUsuarios(int? codCC,string nome, int? codPerf)
        {
            DataTable cc = new DataTable();

            SqlParameter[] pms =
                    {
                        new SqlParameter("@codUsu",codCC),
                        new SqlParameter("@codPerf",codPerf),
                        new SqlParameter("@nome",nome)
                    };

            try
            {
                SqlDataReader retorno = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelUsuario", pms);

                cc.Load(retorno);
            }
            catch (Exception ex)
            {
                throw;
            }
            return cc;
        }

        public DataTable ListarUsuariosAtivo()
        {
            DataTable cc = new DataTable();
            try
            {
                SqlDataReader retorno = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelUsuarioAtivo");

                cc.Load(retorno);
            }
            catch (Exception ex)
            {
                throw;
            }
            return cc;
        }

        public DataTable ListarUsuarioRet(int? CodUsr)
        {
            DataTable cc = new DataTable();
            try
            {
                SqlParameter pms = new SqlParameter("@CODUSR", CodUsr);

                SqlDataReader retorno = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelUsuarioRet", pms);

                cc.Load(retorno);
            }
            catch (Exception ex)
            {
                throw;
            }
            return cc;
        }

        public int ExcluirUsuario(int codigo)
        {
            SqlConnection conn = new SqlConnection(SqlHelper.GetSQLConnection());
            conn.Open();
            SqlCommand dCmd = new SqlCommand("DeletarUsuario", conn);
            dCmd.CommandType = CommandType.StoredProcedure;
            try
            {
                dCmd.Parameters.AddWithValue("@codigo", codigo);
                return dCmd.ExecuteNonQuery();
            }
            catch
            {
                throw;
            }
            finally
            {
                dCmd.Dispose();
                conn.Close();
                conn.Dispose();
            }
        }

        public DataTable TotalHorasCentroDeCustoUsuario(int codUsr, string dtIni, string dtFin)
        {
            DataTable cc = new DataTable();
            try
            {
                SqlParameter[] pms =
                    {
                        new SqlParameter("@CODUSR", codUsr),
                        new SqlParameter("@DTINI", dtIni),
                        new SqlParameter("@DTFIN", dtFin)
                    };

                SqlDataReader retorno = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelTotalHorasUsuario", pms);

                cc.Load(retorno);
            }
            catch (Exception ex)
            {
                throw;
            }
            return cc;
        }

        public DataTable HorasUserCentroDeCustoUsuario(int codUsr, int codCC, int totalHorasUser, string dtIni, string dtFin)
        {
            DataTable cc = new DataTable();
            try
            {
                SqlParameter[] pms =
                    {
                        new SqlParameter("@CODUSR", codUsr),
                        new SqlParameter("@CODCC", codCC),
                        new SqlParameter("@TOTALHORAS", totalHorasUser),
                        new SqlParameter("@DTINI", dtIni),
                        new SqlParameter("@DTFIN", dtFin)
                    };

                SqlDataReader retorno = SqlHelper.ExecuteReader(SqlHelper.GetSQLConnection(), CommandType.StoredProcedure, "procSelHorasPorcentUsuario", pms);

                cc.Load(retorno);
            }
            catch (Exception ex)
            {
                throw;
            }
            return cc;
        }

        #endregion
    }
}